home *** CD-ROM | disk | FTP | other *** search
- ; These routines emulate a push-all of the
- ; registers and segregs before an interrupt
- ; is executed, and then pop them in the
- ; same order.
- ; Note: cpopt is used for testing so we use
- ; a ret instead of a iret.
-
-
- TITLE REGISTER MANIPULATION ROUTINES
- SUBTTL Copyright 1986 by Brian Edginton
- NAME STORE
- INCLUDE DOS.MAC
-
- DSEG
- ; Register and stack storage structure follows.
- S STRUC
- RAX DW ?
- RBX DW ?
- RCX DW ?
- RDX DW ?
- RSI DW ?
- RDI DW ?
- RDS DW ?
- RCS DW ?
- RSS DW ?
- RES DW ?
- RIP DW ? ; Storage for 2 words
- RBP DW ? ; pushed for iret
- RFL DW ? ; and flags.
- RRT DW ? ; Return address
- ; pushed for call.
- S ENDS
- STORAGE S <0,0,0,0,0,0,0,0,0,0,0,0>
- ENDDS
-
-
- PSEG
-
- ; name - cpush()
- ; Pushes all the registers and segregs
- ; and flags onto the stack. Use with
- ; cpop() to restore in correct order.
-
- PUBLIC CPUSH
- IF LPROG
- CPUSH PROC FAR
- ELSE
- CPUSH PROC NEAR
- ENDIF
-
- POP STORAGE.RRT
- POP STORAGE.RIP ; SAVE RETI IP,
- POP STORAGE.RCS ; SAVE RETI CS,
- POP STORAGE.RFL ; SAVE THE FLAGS,
- MOV STORAGE.RAX,AX ; AND TUCK AWAY
- MOV STORAGE.RBX,BX ; ALL REGISTERS.
- MOV STORAGE.RCX,CX
- MOV STORAGE.RDX,DX
- MOV STORAGE.RDI,DI
- MOV STORAGE.RSI,SI
- MOV STORAGE.RDS,DS ; GET THE SEGMENT
- ; MOV STORAGE.RSS,SS ; REGISTERS.
- MOV STORAGE.RES,ES
- PUSH STORAGE.RRT ; PUT CALL RETURN
- ; ADDRESS ON STACK.
- RET
- CPUSH ENDP
-
- PUBLIC CPOP
- IF LPROG
- CPOP PROC FAR
- ELSE
- CPOP PROC NEAR
- ENDIF
-
- PUSH STORAGE.RFL ; RESTORE FLAGS.
- PUSH STORAGE.RCS ; RESTORE CS,
- PUSH STORAGE.RIP ; THEN IP.
- MOV ES,STORAGE.RES
- MOV DS,STORAGE.RDS
- MOV SI,STORAGE.RSI
- MOV DI,STORAGE.RDI
- MOV DX,STORAGE.RDX
- MOV CX,STORAGE.RCX
- MOV BX,STORAGE.RBX ; READY FOR IRET
- MOV AX,STORAGE.RAX ; WITH OLD IP AND
- IRET ; STUFF ON STACK.
- CPOP ENDP
-
- PUBLIC CPOPT
- IF LPROG
- CPOPT PROC FAR
- ELSE
- CPOPT PROC NEAR
- ENDIF
- PUSH STORAGE.RFL ; RESTORE FLAGS.
- PUSH STORAGE.RCS ; RESTORE CS,
- PUSH STORAGE.RIP ; THEN IP.
- MOV ES,STORAGE.RES
- MOV DS,STORAGE.RDS
- MOV SI,STORAGE.RSI
- MOV DI,STORAGE.RDI
- MOV DX,STORAGE.RDX
- MOV CX,STORAGE.RCX
- MOV BX,STORAGE.RBX ; READY FOR IRET
- MOV AX,STORAGE.RAX ; WITH OLD IP AND
- RET ; STUFF ON STACK.
-
- CPOPT ENDP
- ENDPS
- END
-